Skip to content

refactor(api)!: make fluent Delaunay builders canonical - #499

Merged
acgetchell merged 2 commits into
mainfrom
feature/fluent-delaunay-builder
Jul 3, 2026
Merged

refactor(api)!: make fluent Delaunay builders canonical#499
acgetchell merged 2 commits into
mainfrom
feature/fluent-delaunay-builder

Conversation

@acgetchell

Copy link
Copy Markdown
Owner
  • Make DelaunayTriangulationBuilder the canonical construction API, with default simplex storage, typed simplex-data selection, kernel terminals, and statistics terminals in one staged workflow.
  • Remove the legacy DelaunayTriangulation::try_new* and try_with_* batch constructor family, and update examples, benches, docs, preludes, and semgrep rules to use builder chains.
  • Add post-construction simplex-data filling from closures or secondary maps with typed SimplexDataFillError handling.
  • Rework RandomTriangulationBuilder around validated point counts, coordinate ranges, vertex/simplex data type selection, and fluent build terminals.
  • Refresh public Pachner, Delaunay repair, and locate workflows around the current proposal and builder APIs.

BREAKING CHANGE: DelaunayTriangulation::try_new* and try_with_* batch constructors have been removed. Use DelaunayTriangulation::builder(...).build() or DelaunayTriangulationBuilder::new(...).build(), and select simplex payload storage with simplex_data_type::() before construction.

- Make DelaunayTriangulationBuilder the canonical construction API, with
  default simplex storage, typed simplex-data selection, kernel terminals, and
  statistics terminals in one staged workflow.
- Remove the legacy DelaunayTriangulation::try_new* and try_with_* batch
  constructor family, and update examples, benches, docs, preludes, and
  semgrep rules to use builder chains.
- Add post-construction simplex-data filling from closures or secondary maps
  with typed SimplexDataFillError handling.
- Rework RandomTriangulationBuilder around validated point counts, coordinate
  ranges, vertex/simplex data type selection, and fluent build terminals.
- Refresh public Pachner, Delaunay repair, and locate workflows around the
  current proposal and builder APIs.

BREAKING CHANGE: DelaunayTriangulation::try_new* and try_with_* batch constructors have been removed. Use DelaunayTriangulation::builder(...).build() or DelaunayTriangulationBuilder::new(...).build(), and select simplex payload storage with simplex_data_type::<V>() before construction.
@acgetchell acgetchell self-assigned this Jul 3, 2026
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: f6c2f385-65b5-4425-b9dd-5ea2248f2df2

📥 Commits

Reviewing files that changed from the base of the PR and between dc4dd55 and 0be2880.

📒 Files selected for processing (9)
  • examples/topology_editing.rs
  • semgrep.yaml
  • src/delaunay/builder.rs
  • src/delaunay/construction.rs
  • src/delaunay/query.rs
  • src/geometry/util/triangulation_generation.rs
  • tests/proptest_triangulation.rs
  • tests/semgrep/src/project_rules/rust_style.rs
  • tests/serialization_vertex_preservation.rs
🚧 Files skipped from review as they are similar to previous changes (8)
  • tests/serialization_vertex_preservation.rs
  • semgrep.yaml
  • tests/proptest_triangulation.rs
  • examples/topology_editing.rs
  • src/geometry/util/triangulation_generation.rs
  • src/delaunay/query.rs
  • src/delaunay/builder.rs
  • src/delaunay/construction.rs

Walkthrough

This PR replaces legacy triangulation construction with the fluent builder API across the crate, adds typed simplex-payload and construction-statistics support, introduces simplex-data fill APIs, refactors random triangulation generation, updates benchmarks/docs/tests, and removes postponed annotation imports from Python tooling scripts.

Changes

Delaunay Builder API Finalization

Layer / File(s) Summary
Policy, changelog, and public surface
CHANGELOG.md, docs/dev/rust.md, semgrep.yaml, src/lib.rs
Documents the builder-first construction policy, adds semgrep rules for legacy constructors, and re-exports the new simplex-data fill and random count types.
Builder core and construction backends
src/delaunay/builder.rs, src/delaunay/construction.rs
Adds typed simplex payload selection, statistics terminals, shared build backends, and updated explicit/periodic construction behavior.
Simplex payload fill and query APIs
src/delaunay/query.rs, src/core/tds/mutation.rs
Adds simplex payload fill errors and APIs, plus mutation support for filling simplex data on live simplices.
Random triangulation builder refactor
src/geometry/util/triangulation_generation.rs
Introduces typed point counts and refactors random triangulation generation onto the builder API.
Construction telemetry
src/delaunay/diagnostics.rs
Adds construction timing telemetry and merge/record support.
Benchmarks and benchmark docs
Cargo.toml, benches/*, docs/architecture/project_structure.md, benches/PERFORMANCE_RESULTS.md
Adds new repair/location benchmarks, rewires existing benchmark fixtures, and updates benchmark docs and manifests.
Examples and documentation migration
README.md, docs/*.md, examples/*.rs
Updates example code to use builder calls and revises the non-Delaunay/topology-editing workflows.
Core doctests and unit tests
src/core/**/*.rs
Migrates core module doctests and tests to builder-based triangulation construction.
Delaunay doctests and unit tests
src/delaunay/*.rs
Migrates delaunay module doctests and tests to builder-based triangulation construction.
Geometry doctests and unit tests
src/geometry/**/*.rs
Migrates convex-hull, kernel, quality, and measures examples/tests to builder-based construction.
Topology and I/O doctests
src/topology/**/*.rs, src/io/visualization.rs
Updates topology and visualization doctests to use generic-free builder calls.
Integration and property tests
tests/*.rs
Migrates integration/proptest suites to the builder API and expands builder/statistics/error coverage.
Semgrep fixtures and builder test suite
tests/semgrep/src/project_rules/rust_style.rs, tests/triangulation_builder.rs, tests/serialization_vertex_preservation.rs
Adds semgrep constructor fixtures and expands explicit builder/statistics/error-variant coverage.
Tooling cleanup
scripts/*.py, scripts/tests/*.py, pyproject.toml
Removes postponed annotation imports from Python tooling and updates the ty dev dependency pin.

Estimated code review effort: 5 (Critical) | ~150 minutes

Possibly related issues

Possibly related PRs

  • acgetchell/delaunay#65: Both PRs change the CI performance suite and the triangulation construction path used inside benchmark setup.
  • acgetchell/delaunay#200: Both PRs touch the large-scale debug/benchmark harness and its seed-based triangulation setup.
  • acgetchell/delaunay#464: Both PRs directly affect the public construction surface and legacy constructor naming.

Suggested labels: documentation, enhancement, rust, breaking change, api

Poem

A rabbit hopped through builder trees, 🐇
No more turbofish in the breeze;
Payloads typed and counts made neat,
Repair and locate found their feet,
Hop, hop — the burrow sings with ease! 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: making fluent Delaunay builders the canonical API.
Description check ✅ Passed The description is directly aligned with the changeset and accurately outlines the builder API refactor and related updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/fluent-delaunay-builder

Comment @coderabbitai help to get the list of available commands.

@acgetchell
acgetchell enabled auto-merge (squash) July 3, 2026 07:23
@codacy-production

codacy-production Bot commented Jul 3, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 126 complexity

Metric Results
Complexity 126

View in Codacy

🟢 Coverage 98.67% diff coverage · +0.05% coverage variation

Metric Results
Coverage variation +0.05% coverage variation (-1.00%)
Diff coverage 98.67% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (be6728c) 77334 70394 91.03%
Head commit (0be2880) 77903 (+569) 70953 (+559) 91.08% (+0.05%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#499) 1352 1334 98.67%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{}

@acgetchell

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@codecov

codecov Bot commented Jul 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.66171% with 18 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.05%. Comparing base (be6728c) to head (0be2880).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/delaunay/builder.rs 97.07% 6 Missing ⚠️
src/delaunay/query.rs 97.36% 6 Missing ⚠️
src/geometry/util/triangulation_generation.rs 98.50% 3 Missing ⚠️
src/geometry/algorithms/convex_hull.rs 96.72% 2 Missing ⚠️
src/delaunay/construction.rs 99.15% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #499      +/-   ##
==========================================
+ Coverage   91.00%   91.05%   +0.05%     
==========================================
  Files          87       87              
  Lines       77112    77679     +567     
==========================================
+ Hits        70174    70731     +557     
- Misses       6938     6948      +10     
Flag Coverage Δ
unittests 91.05% <98.66%> (+0.05%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

@coderabbitai coderabbitai Bot added api breaking change enhancement New feature or request rust Pull requests that update rust code labels Jul 3, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tests/proptest_triangulation.rs (1)

96-155: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fail partial simplex matches instead of discarding them.

prop_assume!(matched_simplices >= 1) lets this property pass even when only a subset of simplices matched, so translation/scale regressions can slip through unnoticed on Line 152. This should fail unless every original simplex found a counterpart.

🔧 Suggested fix
-    prop_assume!(matched_simplices >= 1);
+    let expected_simplices = tds_orig.simplex_keys().count();
+    prop_assert_eq!(matched_simplices, expected_simplices);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/proptest_triangulation.rs` around lines 96 - 155, The matching logic in
compare_transformed_simplices is too permissive because
prop_assume!(matched_simplices >= 1) allows partial matches to pass. Change this
to require a full one-to-one match between all simplices from dt_orig and
dt_transformed, so the property fails whenever any original simplex has no
counterpart. Use matched_simplices together with the total simplex count from
tds_orig (and/or tds_transformed) to assert completeness, and keep the existing
compare_fn call only for confirmed matching simplex pairs.
🧹 Nitpick comments (5)
tests/serialization_vertex_preservation.rs (1)

56-59: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Confusing .expect() panic message.

.expect("Tds construction succeeded") fires only when build() returns Err, so the panic will misleadingly read "Tds construction succeeded: ". Line 118 in this same file uses the correctly-phrased "Tds construction failed" for the analogous case.

✏️ Proposed fix
-        .expect("Tds construction succeeded");
+        .expect("Tds construction should succeed despite duplicate coordinates");
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/serialization_vertex_preservation.rs` around lines 56 - 59, The
`.expect()` message in the `DelaunayTriangulation::builder(...).build()` test is
backwards and will produce a misleading panic if construction fails. Update the
expectation string in this test case to match the failure path, consistent with
the analogous check later in the same file, so the panic message clearly
indicates `build()` failed rather than succeeded.
src/delaunay/construction.rs (1)

5073-5078: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: consolidate the duplicated DedupPolicy::Epsilon matching.

grid_cell_size_value and the per-vertex epsilon are derived from two separate matches on the same dedup_policy a few lines apart. Extracting a small helper (e.g., returning (epsilon, grid_cell_size)) would remove the risk of the two arms drifting apart on a future edit, but current behavior is correct and covered by tests.

Also applies to: 5092-5093

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/delaunay/construction.rs` around lines 5073 - 5078, The
DedupPolicy::Epsilon logic is duplicated when deriving grid_cell_size_value and
the per-vertex epsilon, so the two match expressions can drift apart over time.
Refactor the nearby matching in construction.rs around the dedup_policy handling
into a small helper that returns both values together, and update the code that
sets grid_cell_size_value and the epsilon assignment to use that shared result
while preserving the existing behavior for DedupPolicy::Epsilon,
DedupPolicy::Exact, and DedupPolicy::Off.
src/delaunay/builder.rs (1)

1667-1728: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Consider extracting shared Euclidean/Canonicalized validation logic to avoid drift between build_with_kernel and build_with_kernel_and_statistics.

The Euclidean/Canonicalized branches here (topology rejection, model validation, canonicalization) duplicate the corresponding logic in build_with_kernel (lines 1525-1556), differing only in calling build_with_kernel_options_and_statistics vs build_with_kernel_options. A future fix/change to one path (e.g., a new topology check) could easily be missed in the other, silently making build() and build_with_statistics() diverge in behavior.

Consider factoring the shared "validate + canonicalize" preamble into a helper that both build_with_kernel and build_with_kernel_and_statistics call before choosing which underlying construction function to invoke.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/delaunay/builder.rs` around lines 1667 - 1728, The Euclidean and
Canonicalized branches in build_with_kernel_and_statistics duplicate the same
validation/canonicalization preamble already present in build_with_kernel, so
the two build paths can drift. Extract the shared topology rejection, model
validation, and canonicalize_vertices setup into a helper used by both
build_with_kernel and build_with_kernel_and_statistics, then have each path only
choose between build_with_kernel_options and
build_with_kernel_options_and_statistics for the final construction call.
tests/semgrep/src/project_rules/rust_style.rs (1)

379-399: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extend legacy_delaunay_batch_constructors_bad to cover all 9 legacy variants.

Only 4 of the 9 name variants matched by the new no-legacy-delaunay-try-new-constructors regex (try_new_with_construction_statistics, try_new_with_topology_guarantee, try_with_topology_guarantee, try_with_topology_guarantee_and_options, try_with_options_and_statistics are missing) are exercised here. Adding the remaining cases would give full regex-coverage confidence for this new rule.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/semgrep/src/project_rules/rust_style.rs` around lines 379 - 399,
`legacy_delaunay_batch_constructors_bad` only exercises 4 of the 9 legacy
`DelaunayTriangulation` constructor variants covered by the new
`no-legacy-delaunay-try-new-constructors` regex. Extend this function to add the
missing legacy calls using the same pattern and `ruleid` annotations,
specifically covering `try_new_with_construction_statistics`,
`try_new_with_topology_guarantee`, `try_with_topology_guarantee`,
`try_with_topology_guarantee_and_options`, and
`try_with_options_and_statistics`, so the test validates full regex coverage.
examples/topology_editing.rs (1)

606-640: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Fine for a demo, but brute-force facet search clones the whole triangulation per candidate.

find_roundtrip_k2_facet_3d clones dt and attempts a forward+inverse Pachner move for every internal facet until one round-trips. For the small fixed 9-vertex fixture this is negligible, but it's worth keeping in mind if this helper is ever reused with larger inputs.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/topology_editing.rs` around lines 606 - 640, The helper
find_roundtrip_k2_facet_3d is doing a full dt.clone() and Pachner trial for
every candidate facet, which makes the search unnecessarily expensive. Refactor
the search to avoid cloning the whole triangulation per iteration—either
prefilter candidate facets more cheaply before trialing, or restructure the loop
so the expensive clone/propose_pachner/attempt_on path in
find_roundtrip_k2_facet_3d is only used on a much smaller set of likely internal
facets.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@semgrep.yaml`:
- Around line 629-673: Broaden the semgrep rule so it also matches the
specialized and bounded DelaunayTriangulation impl blocks used under
src/delaunay, since the current exact impl<$K, $U, $V, const $D: usize>
DelaunayTriangulation<$K, $U, $V, $D> shape can miss legacy constructor
wrappers. Update the pattern-inside around DelaunayTriangulation to cover those
variant impl headers while keeping the existing pattern-either checks for
try_new and try_with_* methods, so reintroduced legacy constructors are still
caught.

---

Outside diff comments:
In `@tests/proptest_triangulation.rs`:
- Around line 96-155: The matching logic in compare_transformed_simplices is too
permissive because prop_assume!(matched_simplices >= 1) allows partial matches
to pass. Change this to require a full one-to-one match between all simplices
from dt_orig and dt_transformed, so the property fails whenever any original
simplex has no counterpart. Use matched_simplices together with the total
simplex count from tds_orig (and/or tds_transformed) to assert completeness, and
keep the existing compare_fn call only for confirmed matching simplex pairs.

---

Nitpick comments:
In `@examples/topology_editing.rs`:
- Around line 606-640: The helper find_roundtrip_k2_facet_3d is doing a full
dt.clone() and Pachner trial for every candidate facet, which makes the search
unnecessarily expensive. Refactor the search to avoid cloning the whole
triangulation per iteration—either prefilter candidate facets more cheaply
before trialing, or restructure the loop so the expensive
clone/propose_pachner/attempt_on path in find_roundtrip_k2_facet_3d is only used
on a much smaller set of likely internal facets.

In `@src/delaunay/builder.rs`:
- Around line 1667-1728: The Euclidean and Canonicalized branches in
build_with_kernel_and_statistics duplicate the same validation/canonicalization
preamble already present in build_with_kernel, so the two build paths can drift.
Extract the shared topology rejection, model validation, and
canonicalize_vertices setup into a helper used by both build_with_kernel and
build_with_kernel_and_statistics, then have each path only choose between
build_with_kernel_options and build_with_kernel_options_and_statistics for the
final construction call.

In `@src/delaunay/construction.rs`:
- Around line 5073-5078: The DedupPolicy::Epsilon logic is duplicated when
deriving grid_cell_size_value and the per-vertex epsilon, so the two match
expressions can drift apart over time. Refactor the nearby matching in
construction.rs around the dedup_policy handling into a small helper that
returns both values together, and update the code that sets grid_cell_size_value
and the epsilon assignment to use that shared result while preserving the
existing behavior for DedupPolicy::Epsilon, DedupPolicy::Exact, and
DedupPolicy::Off.

In `@tests/semgrep/src/project_rules/rust_style.rs`:
- Around line 379-399: `legacy_delaunay_batch_constructors_bad` only exercises 4
of the 9 legacy `DelaunayTriangulation` constructor variants covered by the new
`no-legacy-delaunay-try-new-constructors` regex. Extend this function to add the
missing legacy calls using the same pattern and `ruleid` annotations,
specifically covering `try_new_with_construction_statistics`,
`try_new_with_topology_guarantee`, `try_with_topology_guarantee`,
`try_with_topology_guarantee_and_options`, and
`try_with_options_and_statistics`, so the test validates full regex coverage.

In `@tests/serialization_vertex_preservation.rs`:
- Around line 56-59: The `.expect()` message in the
`DelaunayTriangulation::builder(...).build()` test is backwards and will produce
a misleading panic if construction fails. Update the expectation string in this
test case to match the failure path, consistent with the analogous check later
in the same file, so the panic message clearly indicates `build()` failed rather
than succeeded.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 9e321b3a-666a-4031-af07-cf65ed9a94f5

📥 Commits

Reviewing files that changed from the base of the PR and between be6728c and dc4dd55.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (129)
  • CHANGELOG.md
  • Cargo.toml
  • README.md
  • benches/PERFORMANCE_RESULTS.md
  • benches/README.md
  • benches/allocation_hot_paths.rs
  • benches/boundary_uuid_iter.rs
  • benches/ci_performance_suite.rs
  • benches/common/flip_workflows.rs
  • benches/delaunay_repair.rs
  • benches/delete_vertex.rs
  • benches/edge_key_queries.rs
  • benches/locate.rs
  • benches/pachner_stress.rs
  • benches/profiling_suite.rs
  • benches/tds_clone.rs
  • docs/api_design.md
  • docs/architecture/project_structure.md
  • docs/dev/rust.md
  • docs/diagnostics.md
  • docs/mesh_export.md
  • docs/numerical_robustness_guide.md
  • docs/topology.md
  • docs/validation.md
  • docs/workflows.md
  • examples/delaunayize_repair.rs
  • examples/diagnostics.rs
  • examples/into_from_conversions.rs
  • examples/numerical_robustness.rs
  • examples/topology_editing.rs
  • examples/triangulation_and_hull.rs
  • pyproject.toml
  • scripts/archive_changelog.py
  • scripts/ci/filter_codacy_sarif.py
  • scripts/notebook_check.py
  • scripts/postprocess_changelog.py
  • scripts/semgrep_fixture_config.py
  • scripts/tag_release.py
  • scripts/tests/conftest.py
  • scripts/tests/test_archive_changelog.py
  • scripts/tests/test_filter_codacy_sarif.py
  • scripts/tests/test_notebook_check.py
  • scripts/tests/test_postprocess_changelog.py
  • scripts/tests/test_readme_citation_mirror.py
  • scripts/tests/test_semgrep_fixture_config.py
  • semgrep.yaml
  • src/core/adjacency.rs
  • src/core/algorithms/flips.rs
  • src/core/algorithms/incremental_insertion.rs
  • src/core/algorithms/locate.rs
  • src/core/algorithms/pl_manifold_repair.rs
  • src/core/collections/key_maps.rs
  • src/core/collections/secondary_maps.rs
  • src/core/edge.rs
  • src/core/embedding.rs
  • src/core/facet.rs
  • src/core/facet_incidence.rs
  • src/core/insertion.rs
  • src/core/query.rs
  • src/core/repair.rs
  • src/core/simplex.rs
  • src/core/tds/equality.rs
  • src/core/tds/errors.rs
  • src/core/tds/keys.rs
  • src/core/tds/mutation.rs
  • src/core/tds/snapshot.rs
  • src/core/tds/storage.rs
  • src/core/tds/validation.rs
  • src/core/traits/facet_cache.rs
  • src/core/triangulation.rs
  • src/core/util/facet_keys.rs
  • src/core/util/facet_utils.rs
  • src/core/util/jaccard.rs
  • src/core/validation.rs
  • src/core/vertex.rs
  • src/delaunay/builder.rs
  • src/delaunay/construction.rs
  • src/delaunay/delaunayize.rs
  • src/delaunay/deletion.rs
  • src/delaunay/diagnostics.rs
  • src/delaunay/flips.rs
  • src/delaunay/insertion.rs
  • src/delaunay/locality.rs
  • src/delaunay/pachner.rs
  • src/delaunay/property_validation.rs
  • src/delaunay/query.rs
  • src/delaunay/repair.rs
  • src/delaunay/rollback.rs
  • src/delaunay/serialization.rs
  • src/delaunay/triangulation.rs
  • src/delaunay/validation.rs
  • src/geometry/algorithms/convex_hull.rs
  • src/geometry/kernel.rs
  • src/geometry/quality.rs
  • src/geometry/util/measures.rs
  • src/geometry/util/triangulation_generation.rs
  • src/io/visualization.rs
  • src/lib.rs
  • src/topology/characteristics/euler.rs
  • src/topology/characteristics/validation.rs
  • src/topology/manifold.rs
  • src/topology/ridge.rs
  • src/topology/spaces/toroidal.rs
  • tests/dedup_batch_construction.rs
  • tests/delaunay_edge_cases.rs
  • tests/delaunay_incremental_insertion.rs
  • tests/delaunay_repair_fallback.rs
  • tests/delaunayize_workflow.rs
  • tests/euler_characteristic.rs
  • tests/example_workflows.rs
  • tests/large_scale_debug.rs
  • tests/mesh_export.rs
  • tests/pachner_roundtrip.rs
  • tests/prelude_exports.rs
  • tests/proptest_convex_hull.rs
  • tests/proptest_delaunay_triangulation.rs
  • tests/proptest_euler_characteristic.rs
  • tests/proptest_facet.rs
  • tests/proptest_flips.rs
  • tests/proptest_orientation.rs
  • tests/proptest_serialization.rs
  • tests/proptest_simplex.rs
  • tests/proptest_tds.rs
  • tests/proptest_triangulation.rs
  • tests/public_topology_api.rs
  • tests/regressions.rs
  • tests/semgrep/src/project_rules/rust_style.rs
  • tests/serialization_vertex_preservation.rs
  • tests/triangulation_builder.rs
💤 Files with no reviewable changes (15)
  • benches/boundary_uuid_iter.rs
  • scripts/archive_changelog.py
  • scripts/postprocess_changelog.py
  • scripts/tests/conftest.py
  • scripts/semgrep_fixture_config.py
  • scripts/tests/test_semgrep_fixture_config.py
  • scripts/ci/filter_codacy_sarif.py
  • scripts/tests/test_filter_codacy_sarif.py
  • scripts/tag_release.py
  • scripts/notebook_check.py
  • scripts/tests/test_postprocess_changelog.py
  • benches/edge_key_queries.rs
  • scripts/tests/test_notebook_check.py
  • scripts/tests/test_readme_citation_mirror.py
  • scripts/tests/test_archive_changelog.py

Comment thread semgrep.yaml
- Share Euclidean and canonicalized topology preparation across builder terminals so statistics and non-statistics construction reject and canonicalize consistently.
- Keep deduplication grid sizing and epsilon tolerance derived together to preserve zero-tolerance behavior.
- Tighten fluent-constructor guardrails, transformed-simplex matching, and topology-editing example prefilters.
@coderabbitai coderabbitai Bot added the documentation Improvements or additions to documentation label Jul 3, 2026
@acgetchell
acgetchell merged commit 9cecd49 into main Jul 3, 2026
24 checks passed
@acgetchell
acgetchell deleted the feature/fluent-delaunay-builder branch July 3, 2026 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api breaking change documentation Improvements or additions to documentation enhancement New feature or request rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant